package violencerecursion;

/**
 * @author tongchen
 * @create 2023-05-06 10:46
 */
public class NEmpressReview {
    //n皇后问题

    /**
     *
     * @param data 存放每一行中皇后摆放的列情况  //当发生回溯后，data中的数据会被覆盖
     * @param i 行号
     * @param n n皇后
     * @return
     */
    public static int process(int []data,int i,int n){
        int res=0;
        //递归出口
        if(i==n){
            return 1;
        }
        //正常条件
        for(int j=0;j<n;++i){
            if(isValid(data,i,j)){
                data[i]=j;
                res+=process(data, i+1, n);
            }

        }
        return res;
    }

    private static boolean isValid(int[] data, int i, int j) {
        //循环比较是否在同一列
        for(int k=0;k<i;++k){
            if(data[k]==j||Math.abs(i-k)==Math.abs(j-data[k])){
                return false;
            }
        }
        return true;
    }
}
